from agno.agent import Agent,RunResponseEvent
from agno.models.openai.like import OpenAILike
from APP.app.userprofile.schemas.agent_schema import EntityCollection
from typing import Iterator
from agno.utils.pprint import pprint_run_response

class AgentServices:

    @staticmethod
    async def ner_agent(des:str) -> Iterator[RunResponseEvent]:
        """
        创建一个命名实体识别（NER）智能体
        :return: NER智能体实例
        """
        agent = Agent(
            name="NERAgent",
            model=OpenAILike(
                id="deepseek/deepseek-chat-v3-0324:free",
                api_key='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',
                base_url="https://openrouter.ai/api/v1",
            ),
            session_state={'ner_context': des},
            description='你是一个基于深度学习的专业实体识别工具，专注于人才画像场景下的实体信息抽取。支持从简历、项目描述、绩效评估等文本中自动识别人物、品牌、产品、地点、组织、技能、证书等关键实体，助力企业构建完整的人才知识图谱。',
            instructions = [
                "你是一个专业的实体识别工具，能够从文本中识别出各种实体信息。",
                "请分析以下文本并提取出其中的人物、品牌、产品、地点、组织、技能、证书等实体信息。",
                "提取的实体信息应包括名称、类型、置信度、值和上下文等信息。",
                "文本内容为：{ner_context}"
            ],
            response_model=EntityCollection,
            use_json_mode=True,
            add_state_in_messages=True,
        )

        response_stream:Iterator[RunResponseEvent] = agent.run(
            '请从文本中提取实体信息',
            stream=True,
        )
        result = {
            'final_content':None
        }

        for event in response_stream:
            print(event.event)
            if event.event== 'RunResponseContent':
                result['final_content'] = event.content

        # pprint_run_response(response_stream,markdown=True)


        return result

AgentService: AgentServices = AgentServices()